package com.eastfair.imaster.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.eastfair.boot.request.PageParams;
import com.eastfair.boot.service.SuperService;
import com.eastfair.imaster.dto.CompanyDTO;
import com.eastfair.imaster.dto.CompanySaveDTO;
import com.eastfair.imaster.entity.Company;
import com.eastfair.imaster.vo.CompanyVo;
import com.eastfair.core.base.R;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * <p>
 * 业务接口
 * 公司表
 * </p>
 *
 * @author ligang
 * @date 2021-08-19
 */
public interface CompanyService extends SuperService<Company> {

    /**
     * 新增公司，并添加超级管理员
     * @param companyDTO 公司信息
     * @param adminUserId  管理员用户id
     */
    CompanyVo saveCompany(CompanyDTO companyDTO, Long adminUserId);


    /**
     * 公司是否存在
     * @param companyDTO
     * @return true 存在 ，false 不存在
     */
    Company companyIsExist(CompanyDTO companyDTO);

    /**
     * 审核公司是否通过认证
     * @param companyId 公司id
     * @param isCheck  true通过，false不通过
     * @return
     */
    R<CompanyVo> checkCompany(Long companyId,Boolean isCheck);

    /**
     * 查询接口（service内部使用）
     * @param company
     * @param ids
     * @return
     */
    List<Company> list(Company company, List<Long> ids);

    /**
     * 查询公司以及下属员工
     * @return
     */
    List<CompanyVo> queryCompany(CompanyDTO companyDTO);


    /**
     * 业务功能:添加公司
     * 1当公司未认证并重复，加入到冲突表
     * 2当公司不存在，则新增公司和管理员
     * 3当公司认证并重复，则用户加入到公司
     * @return
     */
    R<CompanyVo> executeCreateCompany(CompanyDTO companyDTO, Long adminUserId);


    /**
     * 业务功能:修改公司
     * @return
     */
    R<CompanyVo> executeUpdCompany(CompanyDTO companyDTO);


    CompanyVo findById(Long id);

    /**
     * 查询公司及其用户信息
     * @param id
     * @return
     */
    CompanyVo findAllUserById(Long id);

    /**
     * 查询公司以及角色
     * @param id
     * @return
     */
    CompanyVo getAndRoleById(Long id);

    /**
     * 分页查询
     * @param params
     * @return
     */
    R<Page<CompanyVo>> queryPage(@RequestBody PageParams<CompanyDTO> params);

    /**
     * 组装公司vo
     * @param companyVoList
     */
    void assembleCompanyVoList(List<CompanyVo> companyVoList);

    /**
     * 删除公司
     * @return
     */
    Boolean delCompany(List<Long> companyIds);

    R executeTcc(Long id);
}
